﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Collections;

using Interfaces;


namespace Model
{
    [Serializable]
    public class Ordre: IOrdredata
    {
        int ordrenr;
        DateTime ordreDato, leveringsDato;
        bool plukket;

        List<Ordrelinie> ordreLinier; // skal bruges til at holde ordrens linier

        public Ordre(int ordrenr, DateTime ordreDato, DateTime leveringsDato)
        {
            this.ordrenr = ordrenr;
            this.ordreDato = ordreDato;
            this.leveringsDato = leveringsDato;
            plukket = false;
            ordreLinier = new List<Ordrelinie>(); // skab en liste til ordrelinier
        }

        public void Opretordrelinie(Vare vare, int antal)
        {
            Ordrelinie ordrelinie = new Ordrelinie(antal); // skab en ordrelinie
            ordrelinie.TilknytVare(vare);  // lav en associering til et vareobjekt
            ordreLinier.Add(ordrelinie); // læg ordrelinien i listen
        }

        public bool SkalEkspederes()
        {
            // hvis DateTime.Now er større end eller lig med leveringsDato returnerer første del 0 eller 1 
            //samtidig må man ikke vise ordrer, der er plukket
            return (DateTime.Now.CompareTo(leveringsDato) >= 0) && !plukket;
        }

        public bool KanEkspederes()
        {
            foreach (Ordrelinie ordreLinie in ordreLinier)
            {
                if (!ordreLinie.KanEkspederes())
                {
                    return false;
                }
            }
            return true;
        }

        public void EkspederOrdre()
        {
            foreach (Ordrelinie ordrelinie in ordreLinier)
            {
                ordrelinie.EkspederOrdrelinie();
            }
            plukket = true;
        }

        public int Ordrenr
        {
            get { return ordrenr; }
        }

        public DateTime OrdreDato
        {
            get { return ordreDato; }
        }

        public DateTime LeveringsDato
        {
            get { return leveringsDato; }
        }

        #region iterator
        // her havde vi tidligere vores egen iterator 
        // nu bruger vi en iterator af typen IEnumerator
        
        public IEnumerator GetOrdrelinieIterator()
        {
            return ordreLinier.GetEnumerator();
        }


        #endregion
    } 
}
